import pytest
import requests

from common.db_util import DBUtil
from common.file_util import clear_extract_data, write_extract_data
from config.setting import project_name

env = 'test' # 工程的全局变量，表名被测环境
base_url = '' # 工程的全局变量，表名被测环境的地址


def pytest_addoption(parser):  # pytest的一个钩子函数
    # 给pytest添加一个新命令-E
    parser.addoption(
        "-E", action='store', default='test',
        help='要测试的环境是什么，可选值有dev/test/prod，默认是test'
    )


@pytest.fixture(scope='session', autouse=True)
def update_env(request):  # 改变全局变量env的值
    global env
    env = request.config.getoption("-E")
    return env


@pytest.fixture(scope='session', autouse=True)
def get_base_url(request): # 改变全局变量base_url的值
    env_key = request.config.getoption("-E")
    global base_url
    base_url = project_name[env_key]
    if base_url is None:
        pytest.fail("你输入的参数值有误，请查看帮助")
    return base_url


@pytest.fixture(scope='session', autouse=True)
def clear_data():
    # 每次工程开始前，都清除extract_data.yml文件中的所有内容
    clear_extract_data()


@pytest.fixture(scope='session', autouse=True)
def get_manage_token():
    # 提取管理端的token
    data = {
        'url': base_url + "/adminapi/login",
        'method': "post",
        'headers': {'content-type': "application/json;charset=UTF-8"},
        'json': {"account": 'admin', "pwd": 'Aa123456!', "imgcode": "1"}
    }
    res = requests.request(**data)  # 请求
    res_body = res.json()
    write_extract_data('token', res_body['data']['token'])

@pytest.fixture(scope='session', autouse=True)
def db():
    # 数据库的夹具，工程开始前，建立数据库连接，结束后，关闭数据库连接
    DBUtil()
    yield
    DBUtil().close()

